/******************************************************************************/
/**
*   @file   bat_types.h
*   @brief  types of the BAT Library
*
*   @par
*   Copyright 2002 Texas Instruments.
*   All rights reserved.
*
*   @par
*   This file is confidential and a trade secret of Texas Instruments.
*   The receipt of or possession of this file does not convey
*   any rights to reproduce or disclose its contents or to
*   manufacture, use, or sell anything it may describe, in
*   whole, or in part, without the specific written consent of
*   Texas Instruments.
*
*   @author Sven Kasner
**/
/******************************************************************************/


#ifndef BAT_TYPES_H
#define BAT_TYPES_H

#include "tapibat_bat_cfg.h"

/*********************************************************************************
 *
 * defines
 *
 *********************************************************************************/

/*! \var typedef unsigned char  T_BAT_instance
    \brief The handle of a BAT Lib instance.
*/

/*! \var typedef unsigned short T_BAT_client
    \brief The handle of a BAT client
    \code
    This is a 16bit value and composed of the instance handle and the client channel.
    The upper 8bit are the instance handle, the lowe 8bit are the client channel.
    Examples:
    0x0000 = first instance, first client channel
    0x0001 = first instance, second client channel
    ...
    0x0200 = third instance, first client channel
    0x0201 = third instance, second client channel
    0x0202 = third instance, third client channel
    0x02FF = third instance, unsolicited indication channel
    \endcode
*/

typedef unsigned char  T_BAT_instance;
typedef unsigned short T_BAT_client;

#define BAT_RCV_BUF_SIZE 800 /* response of %SIMEF comes with 784 bytes ! */

/*********************************************************************************
 *
 * enumerations
 *
 *********************************************************************************/
typedef enum
{
  BAT_INSTANCE_IDLE = 0,
  BAT_INSTANCE_ACTIVATING,
  BAT_INSTANCE_READY,
  BAT_INSTANCE_BUSY     /* the busy state for direction from APP to GDD */
}T_BAT_instance_state;

typedef enum
{
  BAT_CLIENT_IDLE = 0,
  BAT_CLIENT_ACTIVATING,
  BAT_CLIENT_READY,
  BAT_CLIENT_BUSY,       /* the busy state for direction from APP to GDD */
  BAT_CLIENT_SENDING,
  BAT_CLIENT_SENDING_AND_BUSY /* cmd sending + abort busy */
}T_BAT_client_state;


typedef enum
{
  BAT_BUF_EMPTY,
  BAT_BUF_FILLING,
  BAT_BUF_FILLED
}T_BAT_buf_state;

typedef struct
{
  T_GDD_BUF            *gdd_buf; /* to memorize the address of the sent GDD buffer*/
  T_GDD_BUF            *gdd_buf_rcv; /* to memorize the address of the received GDD buffer*/
  T_BAT_client         dest;
  T_BAT_buf_state      buf_st;
  T_BAT_cmd_response   rsp;
  char                 data[BAT_RCV_BUF_SIZE];
} T_BAT_buffer;

typedef struct
{
  T_BAT_client_state   client_state;
  void                 (*signal_cb)           (T_BAT_client client,
                                               int          signal);
  int                  (*response_cb)         (T_BAT_client client,
                                               T_BAT_cmd_response *response);
}T_BAT_client_maintain;


typedef struct
{
  T_GDD_SEGMENT* desc;
  U16         length;
} T_BAT_l2p_maintain;


typedef struct
{
  unsigned long        con_handle;
  T_BAT_instance_state instance_state;
  unsigned char        max_client_num;
  T_BAT_l2p_maintain   l2p_mt;
  T_BAT_buffer         buffer;
  T_BAT_config         *config;
  int                  sem_BAT; /* should be T_HANDLE, but we don't want to include "vsi.h" */
  void                (*instance_signal_cb)   (int          signal);
  int                 (*unsolicited_result_cb)(T_BAT_client client,
                                               T_BAT_cmd_response *response);
}T_BAT_instance_maintain;


#endif /*BAT_TYPES_H*/


